package com.bright.ghj.overt.manager;

import com.bright.ghj.common.pojo.dto.PageDTO;
import com.bright.ghj.overt.pojo.dto.AsyncMessageDTO;
import com.bright.ghj.overt.pojo.query.AsyncTaskMassageQuery;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * @author Tz
 * @date 2024/01/22 15:03
 * @Description 异步消息的Manager
 */
public interface AsyncMessageManager {

    /**
     * 保存异步任务消息
     *
     * @param asyncMessageDTO 异步任务消息的DTO
     * @return                异步任务消息的DTO
     */
    AsyncMessageDTO save(AsyncMessageDTO asyncMessageDTO);

    /**
     * 根据id查询异步任务消息
     *
     * @param id 主键
     * @return   异步任务消息DTO
     */
    AsyncMessageDTO getById(Integer id);

    /**
     * 根据id撤回当前任务
     *
     * @param id 主键id
     * @return   返回结果数
     */
    Integer revokeAsyncTask(Integer id);

    /**
     * 根据条件获取异步任务消息列表
     *
     * @param asyncTaskMassageQuery 查询条件
     * @param pageable              分页条件
     * @return                      异步消息列表
     */
    PageDTO<AsyncMessageDTO> pageAsyncMessage(AsyncTaskMassageQuery asyncTaskMassageQuery, Pageable pageable);

    /**
     * 根据keyword集合查询异步消息列表
     *
     * @param keywords keyword集合
     * @return         异步消息列表
     */
    List<AsyncMessageDTO> listAsyncMessageByKeywords(List<String> keywords);

    /**
     * 一键已读
     *
     * @param execStatus 需要已读的状态列表
     * @param username   需要已读的用户
     * @return 已读记录数
     */
    Integer oneClickRead(List<Integer> execStatus, String username);

    /**
     * 阅读一条未读消息
     *
     * @param id 主键
     * @return 读取结果
     */
    Integer read(Integer id);
}
